package domain;

import java.util.Collection;
import java.util.Date;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.Valid;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;

import org.hibernate.validator.constraints.NotBlank;
import org.springframework.format.annotation.DateTimeFormat;

@Entity
@Access(AccessType.PROPERTY)
@Table( indexes = {@Index(columnList = "estado")} )
public class Presupuesto extends DomainEntity {

	private String titulo;
	private Date fecha;
	private String contenido;
	private double importe;
	private String estado;

	public Presupuesto() {
		super();
	}

	@NotBlank
	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	@NotNull
	@Past
	@Temporal(TemporalType.TIMESTAMP)
	@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm")
	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	@NotBlank
	public String getContenido() {
		return contenido;
	}

	public void setContenido(String contenido) {
		this.contenido = contenido;
	}

	@Digits(integer = 12, fraction = 2)
	@Min(0)
	public double getImporte() {
		return importe;
	}

	public void setImporte(double importe) {
		this.importe = importe;
	}

	@NotBlank
	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	// Relaciones
	private Incidencia incidencia;
	private Collection<ComunidadDeVecinos> comunidadesDeVecinos;

	@Valid
	@ManyToOne()
	public Incidencia getIncidencia() {
		return incidencia;
	}

	public void setIncidencia(Incidencia incidencia) {
		this.incidencia = incidencia;
	}

	@Valid
	@OneToMany(mappedBy = "presupuesto")
	public Collection<ComunidadDeVecinos> getComunidadesDeVecinos() {
		return comunidadesDeVecinos;
	}

	public void setComunidadesDeVecinos(
			Collection<ComunidadDeVecinos> comunidadesDeVecinos) {
		this.comunidadesDeVecinos = comunidadesDeVecinos;
	}

}
